package vue.panels;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Iterator;

import controler.Case;
import controler.Table;

import vue.Ui;
import vue.components.*;

/**
 * <p>Title: vue.CamembertPanel </p>
 *
 * <p>
 * 	Description: Cette classe gere l'affichage de la classe du plateau de jeu
 * </p>
 *
 * <p>Copyright: (c) 2008 FSSIM</p>
 *
 * <p>Company: FSSImock</p>
 *
 * @author Antoine Farnault
 * @author Augustin Couette
 * @version 1.0
 */
public class CamembertPanel extends TPPanel {

	private static final long serialVersionUID = 1L;
	
	//boucle d'affichage
	Affichage affich;

	// buffer memoire ou les images et les textes sont appliques (double buffering)
	Graphics2D buffer;

	// image affiche au final
	public BufferedImage image;
	
	// dimension du canvas
	
	Dimension dim ; // les dimensions du panneau
	
	// ++ les couleurs par defaut
	private final Color COLOR_FOND	= Color.LIGHT_GRAY;//new Color(255,255,255); // bleu fonce
	private final Color COLOR_LIGNE	= Color.LIGHT_GRAY;
	// -- les couleurs par defaut
	
	private final int DIAMETRE = 100;
	private final int RAYON    = DIAMETRE/2; 
	public Table table;
	public ArrayList<Case> claquos;
	
	/**
	 * Constructeur de plateau
	 */
	public CamembertPanel(Table table) {
		affich = new Affichage();
		affich.start();
		this.table = table;
		claquos = table.claquos;
		initComponents();
	}
	
	/**
	 * initialisation des composants graphiques
	 * @see #CamembertPanel(Ui)
	 */
	public void initComponents() {
    	setName("camembertPanel");
		dim = new Dimension(230, 130);
	}
	
	/**
	 * Methode de mis a jour du graphique
	 */
	public void update(Graphics g) {
		paint(g);
	}
	
	/**
	 * methode d'affichage du graphique 
	 */
	public void paint(Graphics g) {
		if(buffer == null){
			image = (BufferedImage)createImage(dim.width,dim.height);
			buffer = (Graphics2D)image.getGraphics();
		}
		
		//buffer.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.8f));
        buffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
	    buffer.setPaint(COLOR_FOND);
       	//buffer.fill(new Rectangle(0,0,dim.width,dim.height));
    	
       	tracerCamembert(); // dessine les camemberts
       	
		g.drawImage(image,0,0,this);
	}
	
	/**
	 * Dessine les camemberts
	 * @param buffer
	 */
	private void tracerCamembert() {

		int x = 50;//dim.width/2;
		int y = 50;//dim.height/2;
		int arcAngle = 60;
		int angle = 0;
		
		for (int i = 0; i < claquos.size(); i++) {
			buffer.setPaint(claquos.get(i).couleur);
			buffer.fillArc(x-RAYON, y-RAYON, DIAMETRE, DIAMETRE, angle, arcAngle);
			angle += arcAngle;
		}

		buffer.setPaint(COLOR_LIGNE);
		buffer.drawOval(x-RAYON, y-RAYON, DIAMETRE, DIAMETRE);
	}

	/**
	 * Classe interne d'animation.
	 * L'animation est gere dans un thread a part.
	 */
	class Affichage extends Thread {
		/**
		 *  Ce thread appelle le rafraichissement de notre fenêtre 
		 *  toutes les 10 milli-secondes
		 */
		public void run(){
			while( true ){
				try {
					repaint(); // repaint appelle update() qui appelle paint()
					sleep( 100 );
				} catch ( Exception e ) {
					System.out.println("Exception methode du thread d'affichage: "+e.getMessage());        
				}
			}
		}
	}
}

